In [10]:
import pandas as pd
import numpy as np
import scipy as sp
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

Carrega dados do FMI referentes ao Brasil


In [11]:
df = pd.read_csv("../data/brazil_gdp_inflation_ir.csv", dtype={'Time':np.int32, 'GDP':np.float64, 'Inflation':np.float64, 'Interest':np.float64}, index_col="Time")

Exibimos série histórica


In [12]:
df['RInterest'] = df.Interest - df.Inflation
brazil = df.sort()
brazil


Out[12]:
GDP Inflation Interest RInterest
Time
1981 -4.233655 101.724821 NaN NaN
1982 0.817012 100.543498 NaN NaN
1983 -2.930728 135.027595 NaN NaN
1984 6.358646 192.121770 NaN NaN
1985 7.526882 225.991556 NaN NaN
1986 7.000000 147.142166 NaN NaN
1987 3.380561 228.335135 NaN NaN
1988 -0.059936 629.114727 NaN NaN
1989 4.024481 1430.723231 NaN NaN
1990 0.426087 2947.732930 NaN NaN
1991 1.030000 432.784602 NaN NaN
1992 -0.540000 951.648460 NaN NaN
1993 4.920000 1927.983498 NaN NaN
1994 5.850000 2075.887182 NaN NaN
1995 4.220000 66.007876 NaN NaN
1996 2.150499 15.757436 NaN NaN
1997 3.375298 6.925317 NaN NaN
1998 0.035346 3.198592 NaN NaN
1999 0.254079 4.857966 19.00 14.142034
2000 4.306187 7.044702 15.75 8.705298
2001 1.310000 6.837831 19.00 12.162169
2002 2.660000 8.450221 25.00 16.549779
2003 1.150000 14.715326 16.50 1.784674
2004 5.710000 6.599125 17.75 11.150875
2005 3.160000 6.867350 18.00 11.132650
2006 3.960000 4.183681 13.25 9.066319
2007 6.090000 3.637028 11.25 7.612972
2008 5.170000 5.663099 13.75 8.086901
2009 -0.330000 4.886408 8.75 3.863592
2010 7.530000 5.038317 10.75 5.711683
2011 2.730000 6.636199 11.00 4.363801
2012 1.821317 5.608352 7.25 1.641648
2013 2.176416 5.839574 10.00 4.160426

Regressão entre taxa de inflação e taxa de crescimento do PIB

Como já evidenciado em outros estudos [1] [2] [3] e [4] não existe correlação negativa entre inflação e crescimento para valores de inflação de até 10%, mesmo no Brasil.


In [13]:
filter = brazil.Inflation < 11.0
sns.set(style="darkgrid")
plt.title(u"PIB vs Inflação até faixa de 10%")
ax = sns.regplot(brazil[filter].Inflation, brazil[filter].GDP, robust=True, n_boot=500)
ax.set_xlabel(u"Inflação")
ax.set_ylabel(u"PIB")


Out[13]:
<matplotlib.text.Text at 0x1982b2b0>

In [14]:
sns.coefplot("GDP ~ Inflation", data=brazil)


Regressão entre taxa de juros e inflação

Um estudo recente [4] aponta para a falta de evidências nas explicações frequentemente fornecidas para que as taxas de juros no Brasil precisem ser tão altas e por tão longo tempo e sugerem:

Hence a wise central bank should consider "testing" the market to make sure it is not dealing with an extreme equilibrium configuration or a long standing disequilibrium.

Inpirado pelos 4 estudos citados até aqui resolvemos verificar a correlação entre taxas de juros e inflação nos patamares de até 10%.


In [15]:
filter = brazil.Inflation < 11.0
color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil[filter].Interest, brazil[filter].Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil[filter].RInterest, brazil[filter].Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal")
ax2.set_xlabel(u"Taxa de juros real")
ax1.set_ylabel(u"Inflação")

f.tight_layout()


Note inflação correlaciona positivamente com taxa de juros, porém isso se explica pelo fato de se subir os juros quando se entende que inflação está elevada. Alega-se em geral que variações nas taxas de juros levam ao menos 6 meses para atuarem sobre o mercado, assim nas próximas seções fazemos um shift de um e dois anos sobre a taxa de juros.


In [29]:
f = plt.figure()
l1, = plt.plot(brazil[filter].index, brazil[filter].Interest, figure=f, label=u"Tx juros nominal")
l2, = plt.plot(brazil[filter].index, brazil[filter].Inflation, figure=f, label=u"Inflação")
l3, = plt.plot(brazil[filter].index, brazil[filter].RInterest, figure=f, label=u"Tx juros real")
f.legend(handles=[l1,l2,l3], labels=[u"Tx juros nominal",u"Inflação", u"Tx juros real"])
plt.title(u"Gráfico da série histórica analisada")
f.tight_layout()



In [17]:
brazil[filter].describe()


Out[17]:
GDP Inflation Interest RInterest
count 16.000000 16.000000 14.000000 14.000000
mean 3.122415 5.767110 14.321429 8.453582
std 2.268726 1.409342 4.957927 4.274604
min -0.330000 3.198592 7.250000 1.641648
25% 1.693488 4.879298 10.812500 4.700772
50% 2.945000 5.751336 13.500000 8.396100
75% 4.522140 6.845210 17.937500 11.146319
max 7.530000 8.450221 25.000000 16.549779

Regressão entre taxa de juros e inflação no ano seguinte.

Shift de um ano na taxa de juros.


In [18]:
brazil_ir_s1 = brazil.copy()
brazil_ir_s1.Interest = brazil.Interest.shift(1)
brazil_ir_s1.RInterest = brazil.RInterest.shift(1)

Sanity check


In [19]:
brazil_ir_s1[brazil_ir_s1.Inflation < 11]


Out[19]:
GDP Inflation Interest RInterest
Time
1997 3.375298 6.925317 NaN NaN
1998 0.035346 3.198592 NaN NaN
1999 0.254079 4.857966 NaN NaN
2000 4.306187 7.044702 19.00 14.142034
2001 1.310000 6.837831 15.75 8.705298
2002 2.660000 8.450221 19.00 12.162169
2004 5.710000 6.599125 16.50 1.784674
2005 3.160000 6.867350 17.75 11.150875
2006 3.960000 4.183681 18.00 11.132650
2007 6.090000 3.637028 13.25 9.066319
2008 5.170000 5.663099 11.25 7.612972
2009 -0.330000 4.886408 13.75 8.086901
2010 7.530000 5.038317 8.75 3.863592
2011 2.730000 6.636199 10.75 5.711683
2012 1.821317 5.608352 11.00 4.363801
2013 2.176416 5.839574 7.25 1.641648

In [20]:
filter = brazil_ir_s1.Inflation < 11

color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil_ir_s1[filter].Interest, brazil_ir_s1[filter].Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil_ir_s1[filter].RInterest, brazil_ir_s1[filter].Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal do ano anterior")
ax2.set_xlabel(u"Taxa de juros real do ano anterior")
ax1.set_ylabel(u"Inflação")

f.tight_layout()



In [25]:
sns.coefplot("Inflation ~ RInterest", data=brazil_ir_s1)



In [21]:
brazil_ir_s1[filter].describe()


Out[21]:
GDP Inflation Interest RInterest
count 16.000000 16.000000 13.000000 13.000000
mean 3.122415 5.767110 14.000000 7.648047
std 2.268726 1.409342 3.981729 3.974904
min -0.330000 3.198592 7.250000 1.641648
25% 1.693488 4.879298 11.000000 4.363801
50% 2.945000 5.751336 13.750000 8.086901
75% 4.522140 6.845210 17.750000 11.132650
max 7.530000 8.450221 19.000000 14.142034

Note que a não há evidência estatística de que taxas de juros maiores provocaram redução da inflação no ano seguinte!

Talvez os efeitos da taxas de juros no Brasil sejam meio retardados... :-) Vamos verificar para 2 anos de diferença

Regressão entre taxa de juros e inflação dois anos à frente.


In [22]:
brazil_ir_s2 = brazil.copy()
brazil_ir_s2.Interest = brazil.Interest.shift(2)
brazil_ir_s2.RInterest = brazil.RInterest.shift(2)

In [23]:
filter = brazil_ir_s2.Inflation < 11
sns.set(style="darkgrid")
color = sns.color_palette()[2]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
f.set_figwidth(12)
sns.regplot(brazil_ir_s2[filter].Interest, brazil_ir_s2[filter].Inflation, robust=True, n_boot=500, ax=ax1)
sns.regplot(brazil_ir_s2[filter].RInterest, brazil_ir_s2[filter].Inflation, robust=True, n_boot=500, ax=ax2).set_ylabel("")
ax1.set_xlabel(u"Taxa de juros nominal de dois anos antes")
ax2.set_xlabel(u"Taxa de juros real de dois anos antes")
ax1.set_ylabel(u"Inflação")

f.tight_layout()



In [26]:
sns.coefplot("Inflation ~ RInterest", data=brazil_ir_s2)



In [24]:
brazil_ir_s2[filter].describe()


Out[24]:
GDP Inflation Interest RInterest
count 16.000000 16.000000 12.000000 12.000000
mean 3.122415 5.767110 15.062500 8.514215
std 2.268726 1.409342 4.544133 4.299917
min -0.330000 3.198592 8.750000 1.784674
25% 1.693488 4.879298 11.187500 5.374713
50% 2.945000 5.751336 14.750000 8.396100
75% 4.522140 6.845210 17.812500 11.137207
max 7.530000 8.450221 25.000000 16.549779

Note que a não há evidência estatística de que taxas de juros maiores tenham provocado redução da inflação dois anos após!

Conclusão

Work in progress


In [ ]:


In [ ]: